http://www.oschina.net/code/list_releted_codes?id=3889&p=1
QT 设置中文文字的时候出现乱码
view sourceprint?
01 #include <QtGui/QApplication>
02 #include <QTextCodec>
03 #include "mainwindow.h"
04
05 int main(int argc, char *argv[])
06 {
07
08 QApplication a(argc, argv);
09 // 以下部分解决中文乱码
10 QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
11 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
12 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
13 // 以上部分解决中文乱码
14 MainWindow w;
15
16 w.show();
17
18 return a.exec();
19 }
或者------------------
这个方法对于已经在汉语字符串周围使用tr()宏的人来说比较有效。按照说明的方法定义一个宏,将其放到全局可见的地方,然后把所有的tr替换成宏的名字即可
标签: 乱码 QT
代码片段(1)
[代码] cpp代码
01 /*在一个汉字字符串可见的地方声明一个QTextCodeC指针,例如某个对话框要显示汉字,那么可以将其声明为该对话框的成员变量*/
02 QTextCodec *gbCode;
03
04 /*对话框的构造函数中*/
05 #define Mtr(s) (gbkCode->toUnicode(s))
06 AppDialog::AppDialog(QWidget *parent)
07 : QDialog(parent), ui(new Ui::Dialog)
08 {
09 gbkCode=QTextCodec::codecForName("GB2312");//你完全可以改成GB18080等编码
10 ui->setupUi(this);
11 createTray();
12 this->setWindowTitle(Mtr("Linkapp v1.0"));
13 /**其他代码***/
14 }
15 /*代码中的使用*/
16 void AppDialog::disconnect()
17 {
18 if(connected){
19 linkThread->stop();
20 connected=false;
21 }
22 linkButtonState=false;
23 trayIcon->setIcon(QIcon(":/images/form-icon.png"));
24 ui->link_unlink->setText(Mtr("连接")); //使用例子1
25 trayIcon->setToolTip(QString(Mtr("未连接")));//使用例子2
26 }
透明按鈕
1 QPushButton *bt =new QPushButton(this);2 bt->setText("ok");
3 bt->move(200,100);
4 bt->setFlat(true);//就是这句能够实现透明,真是意外的发现,希望对一些学习的朋友有点帮助
QT 播放flash
] cpp代码
view source
print?
01 #include <QtGui>
02 #include <QAxWidget>
03
04 /**
05 * 此方法仅限于Windows
06 */
07 int main(int argc, char *argv[])
08 {
09 QApplication a(argc, argv);
10
11 QAxWidget *flash = new QAxWidget(0,0);
12 flash->resize(1000,700);
13 flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
14 flash->dynamicCall("LoadMovie(long,string)",0,"G:/e.swf");
15 flash->show();
16
17 return a.exec();
18 }
19 //需要在pro里加 CONFIG+=qaxcontainer
Widget背景圖片
1 //在Qt3中,使用QWidget::setBackgroundPixmap可以很容易地为窗口添加背景图片,例如:
2
3 widget->setBackgroundPixmap(pixmap);
4
5 //到了Qt4中,则推荐使用调色板(palette)来代替以上方法,同样十分简单,例如:
6
7 QPalette palette;
8 palette.setBrush(widget->backgroundRole(), QBrush(pixmap));
9 widget->setPalette(palette);
QT 動態加載dll
#ifdef Q_OS_WIN02 typedef long ( *SHELLRUN)(long,const char*, const char*, const char* ,const char* ,int );
03 SHELLRUN test;
04 QString str = "shell32.dll";
05 QLibrary lib(str);
06 test = (SHELLRUN)lib.resolve("ShellExecuteA");
07 const char * te = "open";
08 const char * te1 = ".\\help\\Guide.hlp";
09 test(NULL,te,te1,NULL,NULL,5);
10 lib.unload();
11 #endif
Qt 双击时不触发单击事件
为了避免双击时触发单击事件,在单击处理函数clicked()中启动一timer,延时 qApp->doubleClickInterval(),而在此timer的timeout()中处理单击事件,在双击处理函数停止此 timer,一个完整的例子代码如下:(for Qt3,Qt4的也差不多,省略)标签: 双击 QT
代码片段(1)
[代码] main.cpp
01 #include <qapplication.h>
02 #include <qtimer.h>
03 #include <qlistbox.h>
04
05 class Test :public QListBox {
06 Q_OBJECT
07
08 public:
09 Test( QWidget* parent, const char* name = 0 )
10 : QListBox( parent, name ) {
11 connect( this, SIGNAL( clicked( QListBoxItem* ) ),
12 this, SLOT( seeingSingleClick() ) );
13 connect( this, SIGNAL( doubleClicked( QListBoxItem* ) ),
14 this, SLOT( handleDoubleClick() ) );
15
16 _timer = new QTimer( this );
17 connect( _timer, SIGNAL( timeout() ),
18 this, SLOT( handleSingleClick() ) );
19
20 insertStringList( QStringList() << "Item 1" << "Item 2"
21 << "Item 3" << "Item 4" );
22 }
23
24 protected slots:
25 void seeingSingleClick() {
26 _timer->start( qApp->doubleClickInterval(), true );
27 }
28 void handleSingleClick() {
29 qDebug("This was a single click!");
30 }
31 void handleDoubleClick() {
32 qDebug("This was a double click!");
33 _timer->stop();
34 }
35 private:
36 QTimer* _timer;
37 };
38
39
40 int main( int argc, char** argv ) {
41 QApplication app( argc, argv );
42
43 Test* test = new Test(0);
44 test->show();
45
46 QObject::connect( qApp, SIGNAL( lastWindowClosed() ),
47 qApp, SLOT( quit() ) );
48 return app.exec();
49 }
50
51 #include "main.moc"
Qt中去除QString字符串里面多余的空格
问题:QString str(“a b c d e”) => QString rstr(“a b c d e”);用法:QString str(“a b c”);
str = deBlank(str);
经过转换后str的内容就为"a b c”。
标签: QString
代码片段(1)
[代码] 解决方法
01 void deBlank(QString &strs)
02 {
03 int len = strs.length();
04 for (int i=0;i<len;i++)
05 {
06 if (strs.at(i).isSpace())
07 {
08 strs[i] = QChar(' ');
09 }
10 }
11 }
QT 最小化到托盘 和 关闭到托盘 的例子
以下的最小化到托盘依赖于关闭到托盘,虽然有点不常规,但代码是如此的简明...[代码] cpp代码
01 //关闭到托盘---------
02 void Widget::closeEvent(QCloseEvent *e)
03 {
04 e->ignore();
05 this->hide();
06 }
07
08
09 //最小化到托盘----
10 void Widget::changeEvent(QEvent *e)
11 {
12 if((e->type()==QEvent::WindowStateChange)&&this->isMinimized())
13 {
14 QTimer::singleShot(100, this, SLOT(close()));
15 }
16 }