问题已解决: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
使用test->show()
的单独窗口中打开此窗口小部件,则可以按预期/按我的意愿工作。
但是在MainWindow
构造函数中执行此操作会使其无法点击。
MainWindow::MainWindow(QWidget *parent):QMainWindow(parent){
Stack *test = new Stack(this);
//test->show();
setCentralWidget(test);
}
这很奇怪。为什么我无法关注任何可以输入的小部件,例如QTextEdit
,QListWidget
或点击任意QPushButton
小部件?
答案 0 :(得分:0)
请编译以下代码,它正在工作..你正在焦点和编辑QTextEdit ...
<强> stack.h 强>
#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)
{
}
<强> mainwindow1.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();
}
答案 1 :(得分:0)
如果some1会在QT5中找到关于如何从UI设置焦点的输入小部件的答案,你可以使用:
ui->plainTextEdit->setFocus();