日志
QtCN Q&A
2011-11-11 22:58
看帖子的时候好像是懂了,但真正要用到得时候却有不知道从何下手,然后又要花时间去满世界找。
因此在看帖的时候就把觉得有用或可能要用到的东西收集起来,方便查找。 1. Re: QcomboBox hide the drop down arrow yourCombo->setStyleSheet ("QComboBox::drop-down {border-width: 0px;} QComboBox::down-arrow {image: url(noimg); border-width: 0px;}"); 2. open file QDesktopServices::oepnUrl(QUrl::fromLocalFile(QFileInfo(yourname).absoluteFilePath())); 3.open folder QDesktopServices::openUrl(QUrl("file:///C:/Documents and Settings/All Users/")); 4. show 1 as 01 QString QString::arg ( int a, int fieldWidth = 0, int base = 10, const QChar & fillChar = QLatin1Char( ' ' ) ) const 5. 请问qt中输入特殊符号怎么做呢 比如Copyright© http://hi.baidu.com/午小夜/blog/item/65033effdfe58b3d5d6008a0.html 6. 设定TableView的内容居中 TableModel::data(const QModelIndex &index, int role) const { if(role == Qt::TextAlignmentRole){ return int(Qt::AlignHCenter | Qt::AlignVCenter); } 7. 设定tableview headerview文字的对齐方式 ui->mailTableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); 8. 设定程序的桌面图标 Qt 4.7: Setting the Application Icon qthelp://com.trolltech.qt.470/qdoc/appicon.html 9. QT可以读写word文档 #include <QtGui> #include <QAxObject> #include <QAxWidget> int main(int argc, char **argv) { QApplication a(argc, argv); QAxWidget word("Word.Application"); word.setProperty("Visible", true); QAxObject * documents = word.querySubObject("Documents"); documents->dynamicCall("Add (void)"); QAxObject * document = word.querySubObject("ActiveDocument"); document->dynamicCall("SaveAs (const QString&)", QString("e:/test/docbyqt.doc")); document->dynamicCall("Close (boolean)", false); word.dynamicCall("Quit (void)"); return 0; } 使用ActiveQt模块(#include <ActiveQt>),还需要看ActiveX方面的使用Excel接口的问题。 10. 怎样在一个非常耗时的操作前在状态栏上显示信息? 循环中加入了一个QCoreApplication::processEvent()就可以. 11. QProgressBar滚动条的最大值和最小值设置为0可以让滚动条无限滚动 设置QProgressBar的样式 prb->setStyleSheet("QProgressBar {border: 2px solid grey; border-radius: 8px; text-align: center}" "QProgressBar::chunk {background-color: #CD96CD;width: 20px;margin: 1px;}"); 12. Qt内置控件中文化 QTranslator translator; translator.load("qt_" + QLocale::system().name()); //"qt_zh_CN.qm" qApp->installTranslator(&translator); 13. QT获取磁盘目录,获取盘符 QFileInfoList QDir::drives () [static] Returns a list of the root directories on this system. On Windows this returns a list of QFileInfo objects containing "C:/", "D:/", etc. On other operating systems, it returns a list containing just one root directory (i.e. "/"). See also root() and rootPath(). 还有一个方法。。 QFileSystemModel::setFilter( QDir::Drives ); 14. 用代码往数据库添加图片 QSqlQuery类的addBindValue()的参数要求QVariant()类型的数据。 你将图片数据转化成QVaraint就OK了。 比如: QPixmap px("/your/pixmap/file.png"); QSqlQuery; q.prepare("insert into table1(field1) values(?)"); q.addBindValue(QVariant(px)); q.exec(); 数据比较多,那就需要加事务处理,看QSqlDatabase里的transaction()、commit()等方法。 读出来的数据是QVariant()类型的,你将它转化成QByteArray类型的(toByteArray()),然后QPixmap的loadFromData()加载。 QPixmap img("ssss.png"); QSqlQuery q; q.prepare("insert int table1(photo1) values(?)"); q.addBindValue(img.toByteArray()); q.exec(); 读的时候: q.exec("select photo1 from xxxx"); while (q.next()) { QPixmap img; img.loadFromData(q.value(0).toByteArray()); } 15. Qt中在TableView中快速弹出ToolTip窗体 void MainWindow::on_mailTableView_entered(const QModelIndex &index) { if (index.isValid()) { QToolTip::showText(QCursor::pos(),index.data(Qt::DisplayRole).toString()); } } * 要设定mouseTracking为为为true. 16. Qt系统托盘菜单除点击主窗体外无法消失的问题 Qt系统托盘菜单除点击主窗体外无法消失的问题,解决方法是在创建系统拖盘菜单时,指定其parent为QApplication::desktop()。 原因是QSystemTrayIcon的setContextMenu()方法并不会重设参数所指菜单的parent,而其parent如果是桌面,则点击桌面任何位置菜单即可去除。 17. Qt操作Excel http://www.qtforum.org/article/22557/activeqt-excel.html QT+ACCESS: 前提是你的电脑上的QODBC要有驱动. QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); //this is the Access Driver and resolve the problem of Access to deal with data . db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=D:/firefoxDownload/Work-Excel/Access/bin/aa.mdb"); QSqlQuery query; 余下的事情就是去处理query 了,query 已经接上数据库了. QT+EXCEL: QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); //this is the Access Driver and resolve the problem of Access to deal with data . db.setDatabaseName("DRIVER={Microsoft EXCEL Driver (*.xls)};DSN = '';FIL=1;READONLY = ALSE; DBQ=D:/firefoxDownload/Work-excel/Access/bin/aa.xls"); QSqlQuery query; 18. Qt操作Excel 现在用QODBC的方式连接EXCEL,获取所有的工作表名,代码如下: QString connStr="Driver={Microsoft Excel Driver (*.xls)};Dbq=" + m_strFilepath + ";"; QSqlDatabase m_odbc_db=QSqlDatabase::addDatabase("QODBC","LOCAL"); m_odbc_db.setDatabaseName(connStr); if(!m_odbc_db.open()){ //QMessageBox::critical(0,QObject::tr("Get Tables' Name Failed!"),m_odbc_db.lastError().text()); return; //打开失败 } QStringList m_tablenames=m_odbc_db.tables(QSql::AllTables); //获取所有工作表名 m_odbc_db.close(); 第一个工作表名为:"旅客$" 但是获取到的却是乱码:"�ÿ�$" 19.将数据导出生成.excel文件 void dataExport::dataExport_slots() { QSqlQueryModel *model = new QSqlQueryModel; QString sql_count ="select count(*) from infor1"; model->setQuery(sql_count); QSqlRecord rec = model->record(0); int count = rec.value(0).toInt(); //qDebug()<<count; QString sql="select * from infor1"; model->setQuery(sql); //----------------------------------打开excel-------------------------------------- QAxWidget excel("Excel.Application"); excel.setProperty("Visible", true); QAxObject * workbooks = excel.querySubObject("WorkBooks"); //获取excel的绝对路径 QString path = QCoreApplication::applicationDirPath(); QString table = "/Data/***.xls"; path = path+table; //qDebug()<<path; workbooks->dynamicCall("Open (const QString&)", QString(path)); QAxObject * workbook = excel.querySubObject("ActiveWorkBook"); QAxObject * sheets = workbook->querySubObject("WorkSheets"); //删除原先的Sheet; QAxObject * a = sheets->querySubObject("Item(const QString&)", QVariant("Sheet1")); a->dynamicCall("delete"); //新建一个Sheet; sheets->querySubObject("Add()"); QAxObject * b = sheets->querySubObject("Item(int)", 1); b->setProperty("Name", QVariant("Sheet1")); QAxObject *sheet = sheets->querySubObject( "Item(const QVariant&)", QVariant("Sheet1") ); //----------------------------------写数据------------------------------------------ for(int i=1; i<(count+1); i++) { QSqlRecord record = model->record(i-1); for(int j=1; j<5; j++) { QAxObject *range = sheet->querySubObject("Cells(int,int)", i, j); range->dynamicCall("SetValue(const QString&)", record.value(j-1).toString()); } } } |
下一篇: 2011-11-11 11:11:11
上一篇: 我来qtcn一年了!!!