qt—为什么窗口无法输入?

do_not_cry 2014-05-08 09:36:05
qt函数如下:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(700,500);
QTextEdit *text = new QTextEdit(this);
//设置中心主控件
setCentralWidget(text);
//在状态栏显示信息
setWindowTitle("there");//设置主窗口的标题栏
statusBar()->showMessage("Welcome to there");
}

//退出弹窗
bool MainWindow::event(QEvent *close)
{
if(close->type() == QEvent::Close )
{
qDebug()<<"close";
QMessageBox::information(
this,
"Information",
"closeEvent!",
QMessageBox::Ok);
return true;
}
}
如果不加后面的退出弹窗窗口就可以输入,加了反而没法输入。拜求各位大神给点解决办法。。。。
...全文
404 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
do_not_cry 2014-05-09
  • 打赏
  • 举报
回复
那我该怎么改进一下呢???
l4kangaxx 2014-05-09
  • 打赏
  • 举报
回复
你的退出弹窗似乎是这样的:如果是退出事件,就退出,如果不是退出事件,就啥都不做。所以果然就很准确的啥都不做了。
do_not_cry 2014-05-09
  • 打赏
  • 举报
回复
..再顶一个。。。
do_not_cry 2014-05-09
  • 打赏
  • 举报
回复
万分感谢!!
seven_dj 2014-05-09
  • 打赏
  • 举报
回复
头文件添加 #include <QCloseEvent> private: void closeEvent(QCloseEvent * event); cpp文件添加 void MainWindow::closeEvent(QCloseEvent * event) { qDebug()<<"close"; QMessageBox::information( this, "Information", "closeEvent!", QMessageBox::Ok); }
seven_dj 2014-05-09
  • 打赏
  • 举报
回复
根据你的描述,你应该用closeEvent函数。 有时候我们希望在关闭窗口之前做一些操作,例如保存缓存数据或向用户提示是否关闭窗口等等。 由于一般的窗口都是继承自QWidget, 那么我们可以通过覆盖QWidget中的虚函数closeEvent(QCloseEvent* event);来达到这个目的。 (1)首先添加依赖库: [cpp] view plaincopy #include <QCloseEvent> (2)接着声明和定义closeEvent函数: a).h文件 [cpp] view plaincopy protected: void closeEvent(QCloseEvent *event); b).cpp文件 [cpp] view plaincopy void MainWindow::closeEvent(QCloseEvent *event) { //TODO: 在退出窗口之前,实现希望做的操作 } 刚刚将closeEvent应用在了一个小例子上面: 我在主进程中fork()了一个子进程,希望在关闭主窗口后(也就是主进程退出)结束子进程。那么这个时候一般的做法就是监听窗口的关闭事件;然后将要关闭的窗口向本身进程(父进程)发送SIGINT信号,主进程通过已注册好的信号捕捉函数来结束子进程。 代码演示: (1)main.cpp文件 [cpp] view plaincopy #include <QtGui/QApplication> #include "mainwindow.h" int pid_t pid; pid_t child_make() { pid_t p_id; if((pid = fork()) > 0) { return p_id; } //TODO: 以下是子进程的逻辑部分 } // 结束子进程 void sig_int(int signal) { kill(pid, SIGTERM); } int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); void sig_int(int); pid = child_make(); // 注册捕捉SIGINT信号的函数 signal(SIGINT, sig_int); return a.exec(); } (2)mainwindow.h文件 [cpp] view plaincopy #include <QMainWindow> #include <QCloseEvent> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); // 实现QWidget中的虚函数closeEvent(QCloseEvent*); void closeEvent(QCloseEvent *event); ~MainWindow(); private: Ui::MainWindow *ui; }; (3)mainwindow.cpp文件 [cpp] view plaincopy #include "mainwindow.h" #include "ui_mainwindow.h" #include <signal.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } // 在closeEvent内实现具体逻辑 void MainWindow::closeEvent(QCloseEvent *event) { // 向自身进程发送SIGINT信号,相当于raise(SIGINT); kill(getpid(), SIGINT); }
do_not_cry 2014-05-09
  • 打赏
  • 举报
回复
网上搜不到。。。能给我具体的代码吗?或者发到2531532793@qq.com。我的是mainwindow的。拜谢拜谢拜谢!!!!!!
l4kangaxx 2014-05-09
  • 打赏
  • 举报
回复
你应该结贴,哈哈,开个玩笑,改进么很明显的咯,增加对键盘事件的处理呀, else if (Event == QEvent::KeyPress) { ... ... ... } 如何处理键盘事件么你百度一下,不复杂。
do_not_cry 2014-05-08
  • 打赏
  • 举报
回复
自己先顶一个。。。。。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧