QT难题

codeshawn 2014-12-23 09:01:25
int main(int argc, char *argv[])
{

QTextCodec *codec=QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(codec) ;
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
Dialog *w;
QTextStream in(stdin);
while(1)
{
int x;
in>>x;
switch(x)
{

case 1:
{
set_display stdy(111,151);
QApplication a(argc, argv);
w=new Dialog(111,151);
w->show_menu();
w->show();
return a.exec();
break;
}
case 2:
{
set_display stdy(70,70);
QApplication a(argc, argv);
w=new Dialog(70,70);
w->set_mute();
w->show();
return a.exec();
break;
}
case -1:
{
w->close();
break;
}
default:break;
}
}
}


主程序不在QT界面中,他通过调用start( )和stop( )来显示一个界面和关闭一个界面,这里有很多个界面,所以相当于调用一个对应的start就会创建一个QT程序显示对应的界面,同样调用一个stop也会结束一个QT程序关闭对应窗口,执行每个QT程序之前都会设置相应的分辨率(结构体fb_var_screeninfo里的值和QWS_SIZE的值),我上面的测试程序只能运行输入1后要手动ctrl+c后再手动运行程序输入2,
我主要想实现:运行程序输入1执行一个QT程序,输入-1关闭当前QT程序,输入2又运行一个QT程序!听说用多线程不能做界面,很是郁闷??求解
...全文
355 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2015-01-22
  • 打赏
  • 举报
回复
这个,一个本办法就是做好几个gui applications然后用一个主gui来通过QProcess::execute()操控他们
codeshawn 2015-01-20
  • 打赏
  • 举报
回复
不要就此沉默啊!!!!!!一直在线苦等!!!!!!!!
Creator_莫言 2015-01-15
  • 打赏
  • 举报
回复
引用 3 楼 u012175394 的回复:
主要是每次都要设置分辨率(结构体fb_var_screeninfo里的值和QWS_SIZE的值),而设置分辨率又必须在QApplication前面,所以每显示一个窗体大小不一的对话框就要设置一次分辨率并用QApplication创建一个对象,我想创建一个线程包含QApplication,但有警告:GUI不再主线程中,这个怎么弄啊????
GUI必须在主线程中,你可以试试将你的Widget全部分离出去,然后用一个程序去QProcess调用它们
codeshawn 2015-01-15
  • 打赏
  • 举报
回复
主要是每次都要设置分辨率(结构体fb_var_screeninfo里的值和QWS_SIZE的值),而设置分辨率又必须在QApplication前面,所以每显示一个窗体大小不一的对话框就要设置一次分辨率并用QApplication创建一个对象,我想创建一个线程包含QApplication,但有警告:GUI不再主线程中,这个怎么弄啊????
大卫无限 2014-12-23
  • 打赏
  • 举报
回复
pro文件里面加入 CONFIG += console main.cpp

#include <QApplication>
#include <QDialog>
#include <QTextStream>
#include <QThread>

class Wnds : public QObject
{
    Q_OBJECT
public:
    Wnds() : w(0) { }

public slots:
    void showWnd(int x)
    {
        if (w != 0)
            delete w;

        switch(x)
        {
        case 1:
        {
            w = new QDialog();
            w->setWindowTitle("1");
            w->show();
            break;
        }
        case 2:
        {
            w = new QDialog();
            w->setWindowTitle("2");
            w->show();
            break;
        }
        }//end switch
    }

private:
    QDialog *w;
};

class CmdLine : public QThread
{
    Q_OBJECT
protected:
    void run()
    {
        while(1)
        {
            QTextStream in(stdin);
            int x = -1;
            in >> x;
            emit DoGotCmdLine(x);
        }
    }
signals:
    void DoGotCmdLine(int);
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Wnds w;

    CmdLine c;
    c.start();
    QObject::connect(&c, SIGNAL(DoGotCmdLine(int)),
                     &w, SLOT(showWnd(int)), Qt::QueuedConnection);
    return a.exec();
}

#include "main.moc" //这里是实现文件写到cpp里面才需要的,在qtcreator里面先qmake,再编译方可通过.
原型,没有多做处理.比如线程就没有处理退出.
michael2988 2014-12-23
  • 打赏
  • 举报
回复
程序会在a.exec();处stop,直到当前程序关闭。
一直以来,QT的移植作为嵌入式学习的一大难题, 始终困扰着初入此行的工程师。这方面的资料虽然不少,但仍不够系统和详细,使得学习起来相当吃力。初学者常常因为一个细节没有注意到而花费过长的时间;同时,QT本身比较庞大,涉及的知识点较多,这也给学习带来很大的障碍。本手册由飞凌一线工程师撰写,并经过反复测试和修改,力图使广大用户迅速掌握QT的移植方法。需要说明的是,这里详细介绍了QT移植方面的知识,关于应用开发方面的内容将单独作为一个教程来讲解。 飞凌嵌入式为您带来全新的根文件系统、Qtopia2.2、Qtopia4.4.3、 Qt/E4.7的编译方法以及源码、tslib最新版本——tslib1.4。 为了配合讲解,首先要说明一下 1.本次发布Qtopia4.4.3+Qtopia2.2.0 +Qt/E4.7 需要更新内核文件。新的内核nandflash的 mtdblock3分区有500MB,使文件系统中能存放Qtopia桌面环境及应用程序。为了验证自己编译的QT是否可以运行,您要学会使用开发板启动 Linux并挂载nfs(网络文件系统)。nfs启动linux在OK6410的Linux使用手册中有详细的讲解。 2. Qtopia2.2.0是PDA版本,一个比较传统的版本。很早之前,飞凌推出了Qtopia2.2.0在 Redhat Linux 9移植方法,许多朋友一直在使用Qtopia2.2.0。为此,我们拿出时间来,在Ubuntu Linux9.10环境中移植Qtopia2.2.0,为飞凌的老朋友和新朋友送上了Qtopia2.2.0全新环境的编译方法。飞凌使用的Qtopia4.4.3是诺基亚发布最终的手机桌面版本,也是目前嵌入式开发平台上很流行,具有超酷的桌面环境。由于Qt/E4.7.0的库存在bug,而Qt/E4.7.1修复了这些bug,所以此次提供的版本是Qt/E4.7.1库。为了便于描述,以下将Qt/E4.7.1简称Qt/E4.7。

16,238

社区成员

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

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