i18n
http://wiki.meego.com/QML/Internationalisation
示例在:x:\QtSDK\Examples\4.7\tools\i18n\
Qt linquist
.qm可以使用.ts文件生成
Qt linquist可以新建字典文件(phase book)
通过它,可以打开.ts文件,自动转成目标语言文件.ts.
点击release生成.qm文件。
Include Dir
INCLUDEPATH += <your path>
e.g:INCLUDE_PATH += "C:/users/xxx/documents/projects/xxx/include"
源文档 <http://stackoverflow.com/questions/2752352/how-to-add-include-path-in-qt-creator>
Link Lib
win32:LIBS += path/to/Psapi.lib
源文档 <http://stackoverflow.com/questions/718447/adding-external-library-into-qt-creator-project>
The proper way to do this is like this:
LIBS += -L/path/to -lpsapi
This way it will work on all platforms supported by Qt. The idea is that you have to separate the directory from the library name (without the extension and without any 'lib' prefix). Of course, if you are including a Windows specific lib, this really doesn't matter.
In case you want to store your lib files in the project directory, you can reference them with the$$_PRO_FILE_PWD_ variable, e.g.:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
源文档 <http://stackoverflow.com/questions/718447/adding-external-library-into-qt-creator-project>
Setting Up Debugger
源文档 <http://doc.qt.nokia.com/qtcreator-snapshot/creator-debugger-engines.html>
Qt制作透明窗口的几种方法
源文档 <http://hi.baidu.com/klb3713/blog/item/acd1f8c01f40e15eb219a80c.html>
一、Qt Creator的安装和hello world程序的编写(原创)
源文档 <http://hi.baidu.com/yafeilinux/blog/item/cbd4cf7ff67f3b320dd7dab6.html>
在QT下编写带DLL的程序
源文档 <http://wenku.baidu.com/view/fe01070203d8ce2f0066238d.html>
源文档 <http://software.intel.com/zh-cn/blogs/2010/08/31/qt-creator/>
自我总结:QT的国际化编程
源文档 <http://blog.csdn.net/yavobo/archive/2010/06/01/5638931.aspx>
Qt对话框--QMessageBox
源文档 <http://chenboqiang.blog.51cto.com/blog/1068057/321900>
注意QTranslator对象的生命周期问题,会影响对象的使用。
Visual Assisient 插件 只能在2010或2008使用?
问题:Visual studio 2010出现以下字样:Please assign a valid Qt version to this project in the Qt project settings.
解决:打开.vcxproj文件,<UserProperties QtVersion_x0020_Win32="Source",该Source表示
QT->QT Option->Name也要有Source字样。
详解讲解 Qt 编程过程中出现问题
源文档 <http://mobile.51cto.com/symbian-271783.htm>
Linux. qmake. Libraries in the same directory as an application
源文档 <http://developer.qt.nokia.com/forums/viewthread/1872>
1.如果.pro文件中存在
VERSION
=
4.0.0
则会在生成的程序后面补上4.0.0
2.QT可以使用会话管理来管理debug和release的切换
3. 通过以下来控制debug和release
只在msvc下有效,见:http://www.qtforum.org/article/259/qmake-and-release-debug-versions.html
CONFIG(release,
debug|release){
DESTDIR
=
../../bin_qt_pkrss/release
}
build_pass:CONFIG(debug,
debug|release){
DESTDIR
=
../../bin_qt_pkrss/debug
}
QT进程间通信
2011年9月29日
9:00
1、QT通信机制
为了更好的实现QT的信息交互,在QT系统中创建了较为完善的通信机制。QT的通信可分为QT内部通信和外部通信两大类。对于这两类通信机制及应用场合做如以下分析:
(1)QT内部对象间通信
在图形用户界面编程中,经常需要将一个窗口部件的变化通知给窗口的其它部件使其产生相应的变化。对于这种内部对象间的通信,QT主要采用了信号和槽的机制。这种机制是QT区别于其他GUI工具的核心机制。在大部分的GUI工具中,通常为可能触发的每种行为通过定义回调函数来实现。这种回调函数是一个指向函数的指针,在进行函数回调执行时不能保证所传递的函数参数类型的正确性,因此容易造成进程的崩溃。
在QT中,信号和槽的机制取代了这种繁杂的、易崩溃的对象通信机制。信号是当对象状态改变时所发出的。槽是用来接收发射的信号并 响应相应事件的类的成员函数。信号和槽的连接是通过connect()函数来实现的。例如,实现单击按钮终止应用程序运行的代码 connect(button , SIGNAL(clicked()) , qApp , SLOT(quit()) );实现过程就是一个button被单击后会激发clicked信号,通过connect()函数的连接qApp会接收到此信号并执行槽函数quit()。在此过程中,信号的发出并不关心什么样的对象来接收此信号,也不关心是否有对象来接收此信号, 只要对象状态发生改变此信号就会发出。此时槽也并不知晓有什么的信号与自己相联系和是否有信号与自己联系,这样信号和槽就真正的实现了程序代码的封装,提 高了代码的可重用性。同时,信号和槽的连接还实现了类型的安全性,如果类型不匹配,它会以警告的方式报告类型错误,而不会使系统产生崩溃。
(2)QT与外部设备间通信
QT与外部通信主要是将外部发来的消息以事件的方式进行接收处理。外部设备将主要通过socket与QT应用程序进行连接。在此,以输入设备与QT应用程序的通信为例说明QT与外部通信的原理。
在QT的应用程序开始运行时,主程序将通过函数调用来创建并启动qwsServer服务器,然后通过socket建立该服务器与输入硬件设备的连 接。服务器启动后将会打开鼠标与键盘设备,然后将打开的设备文件描述符fd连接到socket上。等到QT应用程序进入主事件循环时,事件处理程序将通过 Linux系统的select函数来检测文件描述符fd的状态变化情况以实现对socket的监听。如果文件描述符fd状态改变,说明设备有数据输入。此 时,事件处理程序将会发出信号使设备输入的数据能及时得到QT应用程序的响应。数据进入服务器内部就会以事件的形式将数据放入事件队列里,等待QT客户应 用程序接收处理。处理结束后再将事件放入请求队列里,通过服务器将事件发送到相应硬件上,完成外部输入设备与QT应用程序的整个通信过程。
2、 QProcess机制分析
QProcess类通常是被用来启动外部程序,并与它们进行通信的。QProcess是把外部进程看成是一个有序的I/O设备,因此可通过 write()函数实现对进程标准输入的写操作,通过read(),readLine()和getChar()函数实现对标准输出的读操作。
(1) QProcess通信机制
QT可以通过QProcess类实现前端程序对外部应用程序的调用。这个过程的实现首先是将前端运行的程序看成是QT的主进程,然后再通过创建主进 程的子进程来调用外部的应用程序。这样QProcess的通信机制就抽象为父子进程之间的通信机制。QProcess在实现父子进程间的通信过程中是运用 Linux系统的无名管道来实现的,因此为了能更加清楚的说明QProcess的通信机制,在此首先介绍关于无名管道实现父子进程间的通信机制。
无名管道是一种只能够在同族父子之间通信,并且在通信过程中,只能从固定的一端写,从另一端读的单向的通信方式。该无名管道是通过调用pipe()函数而创建的。创建代码如下:
- #include <unistd.h>
- int pipe(int fd[2]) ;
- 返回:若成功则为0,若出错则为-1
创建后经参数fd返回两个文件描述符:fd[0]为读而打开,fd[1]为写而打开。经过fork()函数创建其子进程后,子进程将拥有与父进程相 同的两个文件描述符。如果想要实现父进程向子进程的通信则关闭父进程的读端fd[0],同时关闭子进程的写端fd[1]。这样就建立了从父进程到子进程的 通信连接。
由于无名管道的单向通信性,所以如果要应用无名管道实现父子进程之间的双向通信则至少需要应用双管道进行通信。QProcess类的通信原理就是利 用多管道实现了父子进程之间的通信。然而对于外部运行的应用程序大都是通过标准输入而读得信息,通过标准输出而发送出信息,因此只通过建立管道并不能完成 内外进程?之间的通信。要解决此问题,就如该模块开始时所说,QProcess是把外部进程看成是一个I/O设备,然后通过对I/O设备的读写来完成内外 进程的通信。
在QProcess中父子进程之间是通过管道连接的,要实现子进程能从标准输入中读得父进程对管道的写操作,同时父进程能从管道中读得子进程对标准 输出或标准容错的写操作,就要在子进程中将管道的读端描述符复制给标准输入端,将另外管道的写端描述符复制给标准输出端和标准容错端,即实现管道端口地址 的重定向。这样子进程对标准输入、标准输出及标准容错的操作就反应到了管道中。
QProcess在正常渠道模式下具体实现共用了五个无名管道进行通信。五个管道的描述符分别用 childpipe[2],stdinChannelpipe[2],stdoutChannelpipe[2],stderrChannelpipe[2] 和deathpipe[2]五个数组来保存。deathpipe指代的管道会用在消亡的子进程与父进程之间。当子进程准备撤销时会发送一个表示该子进程消 亡的字符给父进程来等待父进程进行处理。stdinChannelpipe,stdoutChannelpipe和stderrChannelpipe所 指代的管道分别与标准输入,标准输出和标准容错进行绑定,实现了与外部程序的通信。childpipe指代的管道主要是为父子进程之间的通信而建立的。
如果在管道中有新数据写入,就会通知相应进程去读。另外图2是QProcess在正常渠道模式下的通信原理图,如果是在融合渠道模式下,将没有容错 管道,此时原理图中将没有第一个管道,也就不会有管道描述符。同时,标准容错端和标准输出端将共同挂接到子进程的stdoutChannelpipe的写 端,来实现内外进程的通信。
(2) QProcess应用方式
由于QProcess类实现了对底层通信方式较为完善的封装,因此利用QProcess类将更为方便的实现对外部应用程序的调用。在此,通过在QT界面中调用外部mplayer的例子来简单说明QProcess的应用方式。
- const QString mplayerPath("/mnt/yaffs/mplayer");
- const QString musicFile("/mnt/yaffs/music/sound.mp3");
- QProcess* mplayerProcess=new QProcess();
- QStringList args;
- args<<"-slave";
- args<<"-quiet";
- args << "-wid";
- args<<musicFile;
- mplayerProcess->setProcessChannelMode(QProcess::MergedChannels);
- yProcess->start(mplayerPath,args);
第一行指明了所要调用的外部应用程序mplayer的位置。第二行指明了所要播放的歌曲文件及地址。第五行设置mplayer为后台模式。在此模式 下,mplayer将从标准输入中读得信息,并通过标准输出向主进程发送信息。六七行为mplayer运行的参数。第九行为设置进程渠道的模式为融合模 式,即将标准输出和标准容错绑定到同一个管道的写端。第十行为启动外部应用程序mplayer。内核中管道及通信环境的建立都是在此步中完成的。
mplayer在slave模式下运行会自动从标准输入中读取信息并执行。由QProcess的通信原理可知,管道的读端描述符 stdinChannelpipe[0]复制给了标准输入,即标准输入的描述符也为stdinChannelpipe[0],因此按照标准输入的描述符去 读信息就是到stdinChannelpipe所对应的管道中读取信息。所以如果想在QT的主进程中发送命令使mplayer退出,只需在主程序中向 stdinChannelpipe[1]端写入命令quit就可以,执行语句为myProcess->write("quit\n");(此处的 write()函数为QProcess类的成员函数,具体实现就是向stdinChannelpipe[1]端写入信息)
(3)QProcess的发展及分析
QProcess类伴随着QT/Embedded的发展逐渐趋于完善。在QTE2及其更前版本中还没有QProcess类,如果想实现与外部应用程 序的通信,必须要自己实现对管道或socket的建立与重定向。到了QTE3版本,就实现了对QProcess类的封装。在QTE3的版本 中,QProcess类的实现是通过应用socket来建立主进程与外部应用程序之间通信的。通信原理与图3所示基本相同,只是将图中的管道描述符改为是 socket的描述符即可。QT主程序在建立成对socket描述符时需要调用Linux系统函数socketpair()。在生成的成对socket描 述符之间可以实现父子进程之间的双向通信,即无论是socket的0套接口还是1套接口都可进行读写。
但为了避免出现通信过程中父子进程对同一个socket的争夺,例如,在子进程还未将父进程发送的信息全部读出时,子进程又要求将自己产生的数据返 回给父进程。如果父子进程双向通信只用一个socket来完成,就会出现父子进程发送的信息混乱情况。因此,对于QProcess的实现仍然必须通过多个 socket来共同完成。
由上面的描述可知,尽管socket有双向通信功能,但在实现QProcess过程中只是利用socket实现了单向通信功能。因此既浪费了对资源 的利用又增加了系统的开销。为了解决此问题,QTE4版本将QProcess的通信连接方式由socket改为了只能实现单向通信的无名管道来实现。通信 原理就是以上3.1 QProcess通信机制中所描述的。
3、其它通信方式
除了上面介绍的无名管道和socket通信方式外,一般操作系统中常用的进程间通信机制也都可以用于QT系统内部不同进程之间的通信,如消息队列、共享内存、信号量、有名管道等机制。其中信号量机制在QT中已经重新进行了封装;有些机制则可以直接通过操作系统的系统调用来实现。另外,如果我们只是想通过管道或socket来实现较简单的外部通信,也可以重新创建管道或socket来实现自己要求的功能。例如,还是在QT主程序中调用外部mplayer。如果我们只是想在QT主程序中控制mplayer,而不要求得到mplayer输出的信息。则可以按照以下方式来实现:
- const char* mplayerPath = "/mnt/yaffs/mplayer";
- const char* musicFile = "/mnt/yaffs/music/sound.mp3";
- const char* arg[5];
- arg[0] = mplayerPath;
- arg[1] = "-slave";
- arg[2] = "-quiet";
- arg[3] = musicFile;
- arg[4] = NULL;
- int fd[2],pid;
- if(pipe(fd)<0)
- printf("creating pipe is error\n");
- else while((pid=fork())<0);
- if(pid==0)
- {
- ::close(fd[1]);
- ::dup2(fd[0],STDIN_FILENO);
- execvp(arg[0],(const* char*)arg);
- }
- else{
- ::close(fd[0]);}
第1到8行与前面QProcess类实现调用mplayer一样,是用来指明mplayer运行时参数的。第10行是创建一个管道。第12行是创建一个子进程。15,20行是关闭父子进程中没用的管道描述符。此时可结合图2.1和图2.2来理解从父进程到子进程通信环境的建立。第16行是把子进程的读端与标准输入绑定,以便mplayer能够接收到父进程发出的命令。17行就是从子进程中调用外部mplayer的实现。此时,程序执行后,mplayer就可以运行起来。如果想在QT主程序中通过发送命令使mplayer退出,就在管道的写端写入命令"quit"就可以。实现语句为write(fd[1], "quit",strlen("quit"));
该例子说明了QT通信方式运用的灵活性,可以根据实际情况进行应用。同时该例子的实现方式正是利用了QProcess类实现的机制,因此可以结合这个例子更加深刻的理解QProcess类的实现机制。
小结:QT进程间通信 的内容介绍完了,希望本文对你也剖帮助,其实里面有很多内容是我们在学习过程苏接触到的!
源文档 <http://mobile.51cto.com/symbian-270726.htm>
run once
2011年9月25日
10:51
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc,
char
*argv[])
{
QCoreApplication app( argc, argv );
//---- Check for another instance code snippet ----
//GUID : Generated once for your application
// you could get one GUID here: http://www.guidgenerator.com/online-guid-generator.aspx
QSharedMemory shared("62d60669-bb94-4a94-88bb-b964890a7e04");
if( !shared.create(
512, QSharedMemory::ReadWrite)
)
{
QMessageBox msgBox;
msgBox.setText(
QObject::tr("Can't start more than one instance of the application.")
);
msgBox.setIcon(
QMessageBox::Critical );
msgBox.exec();
exit(0);
}else{
qDebug()
<<
"Application started successfully.";
}
//---- END OF Check for another instance code snippet ----
// Open Main Window
MainWindow w;
w.show();
return a.exec();
}
源文档 <http://qt.onyou.ch/2010/11/30/run-an-application-only-once/>
FileDialog
2011年9月18日
16:17
1.打开单个文件
QString filename = QFileDialog::getOpenFileName(
this,
"Open Document",
QDir::currentPath(),
"Document files (*.doc *.rtf);;All files(*.*)");
if (!filename.isNull()) { //用户选择了文件
// 处理文件
QMessageBox::information(this, "Document", "Has document", QMessageBox::Ok | QMessageBox::Cancel);
} else // 用户取消选择
QMessageBox::information(this, "Document", "No document", QMessageBox::Ok | QMessageBox::Cancel);
2. 可以选定多个文件的文件打开对话框
QFileDialog::Options options;
if (!native->isChecked())
options |= QFileDialog::DontUseNativeDialog;
QString selectedFilter;
QStringList files = QFileDialog::getOpenFileNames(
this, tr("QFileDialog::getOpenFileNames()"),
openFilesPath,
tr("All Files (*);;Text Files (*.txt)"),
&selectedFilter,
options);
if (files.count()) {
openFilesPath = files[0];
openFileNamesLabel->setText(QString("[%1]").arg(files.join(", ")));
}
源文档 <http://www.rosoo.net/a/201103/11099.html>
menu
2011年9月18日
10:44
mpopmenu
=
new
QMenu(this);
mpopmenu->addMenu(tr("&File")); // 添加弹出菜单
mpopmenu->insertItem // 添加菜单
mpopmenu->popup(event->globalPos()); // 弹出菜单
去掉上方?按钮
2011年9月17日
22:11
setWindowFlags(windowFlags()&~Qt::WindowContextHelpButtonHint);
com
2011年9月17日
18:39
在QT中调用flash的函数,实现QT与flash的交互
源文档 <http://hi.baidu.com/buptyoyo/blog/item/57f7458561acc120c75cc36a.html>
打包
2011年9月16日
21:32
ubuntu
checkinstall做个发行包就可以了,但最好不要打进SDK的库,而是查出依赖了Ubuntu软件仓库中的哪一个包,这样安装程序时如果缺,会自动提示客户的。
源文档 <http://topic.csdn.net/u/20110325/10/6152e333-2d04-4bf7-b197-02789a1b78cc.html>
Deploying an Application on X11 Platforms
源文档 <http://doc.qt.nokia.com/latest/deployment-x11.html>
How to deploy a phonon based application on ubuntu OS?
源文档 <http://developer.qt.nokia.com/forums/viewthread/5608>
ldd 文件 :查看文件依赖
QDockWidget
2011年9月12日
21:06
窗口中可以添加拖放窗口
QDockWidget
*dock
=
new
QDockWidget(tr("Customers"),
this);
dock->setAllowedAreas(Qt::LeftDockWidgetArea
|
Qt::RightDockWidgetArea);
QListWidget*
customerList
=
new
QListWidget(dock);
customerList->addItems(QStringList()
<<
"John
Doe,
Harmony
Enterprises,
12
Lakeside,
Ambleton"
<<
"Jane
Doe,
Memorabilia,
23
Watersedge,
Beaton"
<<
"Tammy
Shea,
Tiblanka,
38
Sea
Views,
Carlton"
<<
"Tim
Sheen,
Caraba
Gifts,
48
Ocean
Way,
Deal"
<<
"Sol
Harvey,
Chicos
Coffee,
53
New
Springs,
Eccleston"
<<
"Sally
Hobart,
Tiroli
Tea,
67
Long
River,
Fedula");
dock->setWidget(customerList);
addDockWidget(Qt::RightDockWidgetArea, dock);
network
2011年8月26日
22:59
好吧,只能在QT的线程下良好工作.因为它需要event的循环执行.
工作目录
2011年8月14日
22:44
我的旧代码:
#ifdef
_MSC_VER
pkwstring
wpath(_MAX_PATH,0);
wpath.resize(::GetModuleFileNameW(0,&wpath[0],_MAX_PATH));
wpath.resize(wpath.rfind(L'\\')+1);
::SetCurrentDirectoryW(&wpath[0]);
#else
pkassert("please write code here");
#endif
代码:
char* get_exe_path()
{
static char buff[256];
char *p;
#if defined(WIN32)
::GetModuleFileName(NULL, buff, sizeof(buff));
p = strrchr(buff, '\\');
#else
int pid;
pid = getpid();
sprintf(buff, "/proc/%d/exe", pid);
readlink(buff, buff, sizeof(buff));
p = strrchr(buff, '/');
#endif
*p = 0;
return buff;
}
这是我在用的取程序执行文件所在路径的函数
一般来说,current path是指程序执行时,环境的当前目录,不一定是执行文件所在目录
比如我可以在/下执行/home/user/MyProc, 这时候,current path是/
源文档 <http://www.linuxsir.org/bbs/thread297818.html>
QCoreApplication::applicationDirPath ()
这个方法可以会的可执行程序的路径。
源文档 <http://www.linuxsir.org/bbs/thread297818.html>
thread
2011年8月14日
20:27
Threading Basics
源文档 <http://doc.qt.nokia.com/4.7-snapshot/thread-basics.html>
qt线程类---QThread
源文档 <http://no001.blog.51cto.com/1142339/276984>
time
2011年8月14日
17:19
详见帮助文档中的QTime或QTimeEvent
qtreewidget
2011年7月22日
21:47
添加右键菜单
源文档 <http://topic.csdn.net/u/20101216/15/bdb841a6-58db-4f67-9fa0-f05de72ca728.html>
re
自编译
2011年6月23日
9:09
1.下载qtsdk ,source, vstool
2.安装qtsdk,vstool
3.下载openssl 1.0.c那个编译
4.编译source
5.用vs2008打开qt项目,在项目->属性->调试->环境:
PATH=$(QTDIR)\bin%3b$(PATH)
改为
PATH=$(QTDIR)\bin%3b$(PATH)%3bE:\develop\QtSDK_Src\bin
附:
源文档 <http://www.cnblogs.com/rockhawk/archive/2010/12/15/1906956.html>
微博是个大金矿,使用VS2010编译QOAuth支持微博通用认证OAuth实现SINA微博登陆
源文档 <http://www.cnblogs.com/rockhawk/archive/2011/01/08/1930983.html>
Qt Visual Studio Add-in
源文档 <http://developer.qt.nokia.com/wiki/QtVSAddin>
MultiMedia
2011年6月11日
21:03
第三方多媒体库:(已在qt sdk 中集成phonon)
http://techbase.kde.org/Development/Tutorials/Phonon/Introduction
QString
2011年6月11日
15:03
- Qstring -> unicode
class
WCHAR_Holder
{
public:
WCHAR
*
w;
WCHAR_Holder(QString
s)
:w(0)
{
w
=
new
WCHAR[s.length()+1];
s.toWCharArray(w);
w[s.length()]
=0;
}
~WCHAR_Holder()
{
delete[]
w;
}
};
Private::WCHAR_Holder
w_text(text);
w_text.w // unicode
// like this:
Qstring qs;
WCHAR* p = new WCHAR[qs.length()+1];
qs.toWCharArray(p);
delete[] p;
2.uncode -> Qstring
QString
qs;
qs.fromWCharArray(unicode,-1);
- other
QTextCodec::codecForName("GB2312")->fromUnicode(strT1);
源文档 <http://www.baidu.com/s?wd=qstring+unicode&inputT=2095>
字符编码转换:
wchar_t* CCharactersetChanger::string_2_unicode(const char* bytearray,int len,const char* codename)
{
QString qs = QTextCodec::codecForName(codename)->toUnicode(bytearray,len);
pkvector<wchar_t> mwbuf;
if(mwbuf.size()<(len+1))
mwbuf.resize((len+1));
int qes = qs.toWCharArray(&mwbuf[0]);
return alloc_string((const wchar_t*)&mwbuf[0],qes);
}
char* CCharactersetChanger::string_2_utf8(const char* bytearray,int len,const char* codename)
{
QString qs = QTextCodec::codecForName(codename)->toUnicode(bytearray,len);
QByteArray qba = qs.toUtf8();
return alloc_string(qba.data(),qba.length());
fileDialog
2011年6月10日
22:30
QString filename = QFileDialog::getOpenFileName(
"/home/macak/Desktop/Muzika",
"MP3's (*.mp3)",
this,
"open file dialog"
"Choose a file" );
源文档 <http://www.qtforum.org/article/1119/mp3-player.html>
Script
2011年6月8日
22:07
Qt Script学习笔记(一)
源文档 <http://hi.baidu.com/cyclone/blog/item/3053e924fe8318114c088dea.html>
源文档 <http://labs.qt.nokia.com.cn/tag/qt-script/>
源文档 <http://labs.qt.nokia.com.cn/tag/qt-script/>
Compiler error
2011年6月8日
20:35
undefined reference to `_imp___ZN11QThreadPool16setExpiryTimeoutEi':
解决问题:只要在工程文件里,加上 QT+ = Core
Resource dll
2011年5月27日
20:51
The Qt Resource System
源文档 <http://doc.qt.nokia.com/4.6/resources.html>
Qt界面如何添加工具栏图标
源文档 <http://blogold.chinaunix.net/u2/67893/showart_654424.html>
Colour
2011年5月22日
10:11
QPushButton的背景色是怎么设置的呢?
源文档 <http://topic.csdn.net/u/20100726/10/c70d0fb7-b4db-4f42-9f40-09187ecf46a0.html>
button->setStyleSheet("background-color:#FF0000");好像只能固定一个颜色
我要用QColor color = QColorDialog::getColor();去取得button当前显示的颜色,然后让button显示这种颜色应该怎么做?
Dialog
2011年5月22日
9:52
QT 模态对话框
模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等。
所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。
在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框;另一种是使用show()方法,它使得对话框既可以模态显示,也可以非模态显示,决定它是模态还是非模态的是对话框的modal属性。
在Qt中,Qt的模态与非模态对话框选择是通过其属性modal来确定的。我们来看看modal属性,其定义如下: modal : bool默认情况下,对话框的该属性值是false,这时通过show()方法显示的对话框就是非模态的。而如果将该属性值设置为true,就设置成了模态对话框,其作用于把QWidget::windowModality属性设置为Qt::ApplicationModal。
而使用exec()方法显示对话框的话,将忽略modal属性值的设置并把对话框设置为模态对话框。
一般使用setModal()方法来设置对话框的modal属性。
我们总结一下设置对话框为模态的方法。
◆
如果要设置为模态对话框,最简单的就是使用exec()方法,示例代码如下: MyDialog myDlg; myDlg.exec();也可以使用show()方法,示例代码如下: MyDialog myDlg; myDlg.setModal(true); myDlg.show();◆
如果要设置为非模态对话框,必须使用show()方法,示例代码如下: MyDialog myDlg; myDlg.setModal(false);//或者myDlg.setModal(); myDlg.show();再次强调,目前有的朋友对于模态对话框和非模态对话框的认识有误解,认为使用show()方法显示的就是非模态对话框,这是不正确的。
小贴士:有时候,我们需要一个对话框以非模态的形式显示,但又需要它总在所有窗口的最前面,这时可以通过如下代码设置: MyDialog myDlg; myDlg.setModal(false);//或者myDlg.setModal(); myDlg.show(); //关键是下面这行 myDlg.setWindowFlags(Qt::WindowStaysOnTopHint);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qter_wd007/archive/2010/03/08/5358049.aspx
源文档 <http://blog.csdn.net/pcsuite/archive/2010/11/10/6000438.aspx>
label
2011年5月17日
10:12
设置颜色
http://jesserei.blog.163.com/blog/static/121411689201019112634413/
transparent
2011年5月16日
16:08
http://doc.qt.nokia.com/qq/qq16-background.html
variable
2011年8月13日
11:07
qvar.h
#ifndef
_QVAR_H__
#define
_QVAR_H__
/*!
QVariant
helper.
@see
http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/
@example
MyClass
*p;
QVariant
v
=
VPtr<MyClass>::asQVariant(p);
MyClass
*p1
=
VPtr<MyClass>::asPtr(v);
*/
template
<class
T>
class
VPtr
{
public:
static
T*
asPtr(QVariant
v)
{
return
(T
*)
v.value<void
*>();
}
static
QVariant
asQVariant(T* ptr)
{
return
qVariantFromValue((void *) ptr);
}
};
/*!
.
@example
QVariant
v
=
variable_from_ptr_helper(T*
ptr).
*/
template
<class
T>
inline
QVariant
variable_from_ptr_helper(T* ptr)
{
return
VPtr<T>::asQVariant(ptr);
}
#endif
close
2011年9月14日
18:49
Qt按ESC关闭模态对话框不触发closeEvent()问题解析
源文档 <http://www.cnblogs.com/codingmylife/archive/2010/04/29/1724571.html>
在QMainWindow子类中重载:
virtual void closeEvent(QCloseEvent *);
No comments:
Post a Comment