Qt (正確には 5.4) を使い始めたばかりで、それを使用して C++ プロジェクトの GUI を構築し、一部のハードウェアを制御しています。今私の問題は、そのメソッドを使用して表示されたテキストを更新できないことですQLineEdit
(または、これは同じ問題のようです)。「更新」とは、メイン ウィンドウ コンストラクターから呼び出されたときに一度だけ機能することを意味しますが、それ以上は機能しません。定義したスロット関数内から使用しています。直後に使用しても何もしませんでした。QLabel
setText()
setText()
repaint()
私はここで恐ろしいことをしているに違いない...
更新: これは確かに正しいです。自分のコードが GUI スレッドで問題を引き起こしています。
ここに例があります
main.cpp
int main( int argc, char* argv[] ) {
QApplication app(argc, argv);
CmainWindow mainApp;
mainApp.show();
return app.exec();
}
CMainWindow.h
class CMainWindow : public QMainWindow, private Ui::MainWindow {
Q_OBJECT
Q_DISABLE_COPY( CMainWindow )
public:
CMainWindow( QWidget *parent = 0 );
~CMainWindow();
public slots:
void slotButtonConnectClicked(void);
protected:
void setConnections();
private:
AbstractReader_t* pReader;
QString* ErrorString; // conversion mule for std::string
);
CMainWindowConnections.cpp
void CMainWindow::setConnection(void) {
Q_CHECK_PTR( pushButton_Connect )
connect( pushButton_Connect, SIGNAL( clicked() ), this, SLOT( slotButtonConnectClicked()) );
}
CMainWindow.cpp
CMainWindow::CMainWindow( QWidget *parent ) : QMainWindow(parent) {
pReader = NULL;
ErrorString = new QString("GUI Initialized"); // just something to test
setupUi(this);
setConnections();
lineEdit_Error->setText(*ErrorString); // this works !
}
void CMainWindow::slotButtonConnectClicked( void ) {
lineEdit_Error->setText("Initialising..."); // this wont show
// some of my own code here caused problem
} //nope, not even after here