alexltr的个人主页

http://www.qtcn.org/bbs/u/107032  [收藏] [复制]

alexltr

我不是IT,只是喜欢Qt。 我不是程序员,只是与程序有缘。

  • 26

    关注

  • 60

    粉丝

  • 150

    访客

  • 等级:骑士
  • 身份:论坛版主
  • 总积分:537
  • 男,1976-01-01
  • 广州

最后登录:2024-04-20

更多资料

日志

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());
        }
    }
}

分类:默认分类|回复:0|浏览:2577|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:05-09 20:38
©2005-2016 QTCN开发网 版权所有 Gzip disabled