簡體   English   中英

無法集中精力並向Qt5中的小部件提供輸入

[英]Unable to focus and give input to widgets in Qt5

已解決的問題 :Q_OBJECT宏是必需的,正確的信號插槽聲明對於任何其他句柄也很重要。

我無法專注於任何輸入類型的小部件,例如QTextEditQListWidget等。

注意 :沒有編譯時或運行時錯誤。

更新QSplitter工作正常! 我有一個QListWidget ,我單擊了它的項目,但是只有當我使用拆分器進行下一步移動時,它們才會突出顯示。

我有一個MainWindow從派生類QMainWindow在聲明main_window.h

class MainWindow : public QMainWindow{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
//some other members like menu and statusbar here
}

我還有另一個叫Stack類,它是從stack.h定義的QWidget stack.h

class Stack: public QWidget{
public:
    Stack(QWidget *parent=0);
//some other members
}

Stack構造方法如stack.cpp

 Stack::Stack(QWidget *parent):QWidget(parent){
        main = new QHBoxLayout;
        handle = new QSplitter;
        setupList();
        setupScreens();
        //above functions add the widgets to the handle splitter
        main->addWidget(handle);
        setLayout(main);
    }

如果我使用test->show()在與MainWindow分開的單獨窗口中打開此小部件,則一切按預期/按我的方式工作。 但是在MainWindow構造函數中執行此操作會使它不可單擊。

MainWindow::MainWindow(QWidget *parent):QMainWindow(parent){
    Stack *test = new Stack(this);
    //test->show();
    setCentralWidget(test);
}

這很奇怪。 為什么我無法集中處理任何可以接受輸入的小部件,例如QTextEditQListWidget或單擊任何QPushButton小部件?

請編譯以下代碼,它正在工作..您正在集中精力並在QTextEdit上進行編輯...

#include <QWidget>
class Stack: public QWidget
{
    Q_OBJECT
public:
    Stack(QWidget *parent = 0);
    ~Stack(void);
};

stack.cpp

   #include "Stack.h"
    #include<QTextEdit>
    #include<QHBoxLayout>

    Stack::Stack(QWidget *parent):QWidget(parent){
           QHBoxLayout* main = new QHBoxLayout;
            QTextEdit *test = new QTextEdit;

            main->addWidget(test);

            //other things added to main layout
            setLayout(main);
        }
    Stack::~Stack(void)
    {
    }

主窗口1.h

  #ifndef MAINWINDOW1_H
    #define MAINWINDOW1_H

    #include <QtGui/QMainWindow>
    //#include "ui_mainwindow1.h"

    class Mainwindow1 : public QMainWindow
    {
        Q_OBJECT

    public:
        Mainwindow1(QWidget *parent = 0, Qt::WFlags flags = 0);
        ~Mainwindow1();

    private:
        //Ui::Mainwindow1Class ui;
    };

    #endif // MAINWINDOW1_H

mainwindow1.cpp

  #include "mainwindow1.h"
    #include "Stack.h"
    #include <QTextEdit>

    Mainwindow1::Mainwindow1(QWidget *parent, Qt::WFlags flags)
        : QMainWindow(parent, flags)
    {
        Stack *test = new Stack;
        setCentralWidget(test); 
    }

    Mainwindow1::~Mainwindow1()
    {

    }

main.cpp

#include "mainwindow1.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Mainwindow1 w;
    w.show();
    return a.exec();
}

如果some1可以找到有關如何在QT5中從UI設置對輸入小部件的關注的答案,則可以使用:

ui->plainTextEdit->setFocus();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM