только начал использовать qt, просмотрел документы, google, примеры и т. д., пытаясь найти простые примеры (работающие, заметьте), которые показали, как делать (имхо) простые вещи сами по себе. ну, я наткнулся на свой ответ, и мне было интересно, вызовет ли этот подход проблему позже, когда код станет более сложным. для этого примера больше включений, чем необходимо, но это прямо из рабочего кода. mainwindow.h: я добавил
private slots:
void vpkButton_clicked();
и после Ui::MainWindow *ui; я добавил QLineEdit *vpkPathTxt; в mainwindow.cpp: после
ui->setupUi(this);
я добавил
connect( this->ui->vpkButton, SIGNAL( clicked() ), this, SLOT(vpkButton_clicked()) );
чтобы подключить мою кнопку пользовательского интерфейса к соответствующему слоту, проблема заключалась в том, чтобы получить строку из vpkButton_clicked() для отображения в редактировании строки, которое я сделал в дизайнере, что в итоге сработало для меня, добавив следующее:
vpkPathTxt = this->ui->vpkPathTxt;
функция в моем main.cpp стала очень простой: (объявления QString вверху вне пустот)
void MainWindow::vpkButton_clicked()
{
vpkName = QFileDialog::getOpenFileName(this,
tr("Open VPK File"), "~/", tr("VPK Files (*_dir.vpk)"));
vpkPathTxt->setText(vpkName);
qDebug() << vpkName;
}
причина, по которой я спрашиваю, заключается в том, что это кажется слишком простым, чтобы быть надежным, и тот факт, что я не видел, чтобы это было сделано так, любой вклад приветствуется, спасибо
vpkPathTxt, указывающую на вашui->vpkPathTxt? Просто чтобы сэкономить на наборе текста? Идея указателяuiзаключается в том, что он инкапсулирует все элементы пользовательского интерфейса, поэтому он не мешает другим переменным, необходимым для логики вашего класса. Кроме того,this->является необязательным; Я бы оставил это. - person leemes   schedule 11.12.2013vpkPathTxt— это неинициализированный указатель, который вы используете в других операторах. Замените их наui->vpkPathTxtи удалите переменную в заголовочном файле. Если я вас правильно понял, у вас есть такая переменная в шапке нижеUi::MainWindow *ui. - person leemes   schedule 12.12.2013on_vpkButton_clicked(); это подключит его к сигналу автоматически для вас. Вместо того, чтобы писать название слота вручную, вы можете щелкнуть правой кнопкой мыши в дизайнере на виджете, выбрать перейти к слоту, выбрать слот, и он будет создан соответствующим образом. - person leemes   schedule 12.12.2013