0

已解决的问题:Q_OBJECT 宏是必要的,正确的信号槽声明对于任何其他句柄也很重要。

我无法专注于任何输入类型的小部件QTextEdit,例如QListWidget等。

注意:没有编译时或运行时错误。

更新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派生自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);
    }

MainWindow如果我在using的单独窗口中打开此小部件test->show(),则事情会按预期/按我的意愿工作。但是在MainWindow构造函数中这样做会使其无法点击。

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

这很奇怪。为什么我无法聚焦任何可以输入的小部件,例如QTextEditQListWidget或单击任何QPushButton小部件?

4

2 回答 2

0

请编译以下代码,它正在工作..您正在 QTextEdit 上获得焦点和编辑...

堆栈.h

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

堆栈.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

主窗口1.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()
    {

    }

主文件

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Mainwindow1 w;
    w.show();
    return a.exec();
}
于 2013-08-20T10:39:34.267 回答
0

如果 some1 会找到关于如何在 QT5 中从 UI 设置焦点输入小部件的答案,您可以使用:

ui->plainTextEdit->setFocus();
于 2017-12-01T12:41:25.200 回答