1.請問可以在Qthread裏面 操作 ui控件嗎?
不可以。 文檔原文: In GUI applications, the main thread is also called the GUI thread because it's the only thread that is allowed to perform GUI-related operations
所以只能通過信號和槽機制進行傳遞
2.QT4增加了一個非常有用的類QSettings
QSettings是qt4.0提供的一個讀取配置文件的類,在windows平臺,它提供了ini文件讀些,註冊表讀寫的功能。而且使用也非常簡單。大家可以參照它的示例:$QTDIR\examples\tools\settingseditor
我就簡單點隨便介紹介紹它的使用吧
QSettings::Format有兩種:
QSettings::NativeFormat在windows平臺可以讀寫windows註冊表.
QSettings::IniFormat可以讀寫ini格式的配置文件
在Unix/X11平臺下這兩個Format效果是一樣的:(
1).讀寫註冊表
//注意的就是路徑名必須是"/"而不是"\\"等.否則不能讀寫,同時注意
//Format爲QSettings::NativeFormat
QSettings *settings = new QSettings("HKEY_CURRENT_USER/", QSettings::NativeFormat);
//寫HKEY_CURRENT_USER/regedit/test,設置test值爲red
settings->setValue("regedit/test", "red");
//讀 HKEY_CURRENT_USER/regedit/test,默認值是ddd
QString value = settings->value("regedit/test", "ddd").toString();
刪除設置對應的是settings->remove( const QString & key )
2).讀取ini配置文件
ini文件格式如下:
[Alpha]
Beta/Beta=1
Beta/Gamma=2
Beta/Delta=1111
Beta/Epsilon=5
Iota=7
Omicron=11
QSettings *settings = new QSettings(fileName, QSettings::IniFormat);
//寫Beta/Beta
settings->setValue("Alpha/Beta/Beta", 68);
其他和讀寫註冊表差不多,我就懶得寫了
發覺QT4讀寫的這種配置,即可兼容windows下的ini文件,同時它的功能也比windows API所提供的功能強.
3.QTextEdit如何得到光標所在的行和列??
首先獲取QTextEdit 的當前光標
const QTextCursor cursor = textEdit->textCursor();
然後
int ColNum = cursor.columnNumber();
int RowNum = cursor.blockCount();
這樣就over了
4.隱藏滾動條:
一般有滾動條的控件都有setVerticalScrollBarPolicy和setHorizontalScrollBarPolicy函數,
只要設置爲Qt::ScrollBarAlwaysOff就可以隱藏滾動條了,默認是Qt::ScrollBarAsNeeded需要時纔出現。
5.用qt把數據寫入Excel 中
用qt把數據寫入Excel 中:
代碼:
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
"",
tr("file ( *.CSV)"));
if(fileName == "")
{
return;
}
QTextCodec *code;
code = QTextCodec::codecForName("gb18030");
std::string strbuffer = code->fromUnicode(fileName).data();
FILE *fileWrite = fopen( strbuffer.c_str(),"w");
QString strFemale = "Female Count";
QString strMale = "Male Count";
QString strPatientCount = "Patient Count";
QString str ="\n";
std::string strCountbuffer = code->fromUnicode(strFemale+","+strMale+","+strPatientCount+str+QString().setNum(femaleCount)+","+QString().setNum(maleCount)+","+QString().setNum(patientCount)).data();
QFile file;
file.open(fileWrite, QIODevice::WriteOnly);
file.write(strCountbuffer.c_str(), qstrlen(strCountbuffer.c_str()));
file.close();
6.linux下寫文件亂碼:
/* 往文本里寫數據 */
QFile file("backup_file.txt");
if(file.open(QIODevice::ReadWrite))
{
QTextStream out(&file);
//設置編碼用的codec
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
// 設置流的編碼方式
out.setCodec(codec);
for( int i=0; i < 30; i++)
{
out << QString::number(i, 10) << "姓名" << endl;
}
}
解決方法:
//設置編碼用的codec
// QTextCodec *codec = QTextCodec::codecForName("UTF-8");
// 設置流的編碼方式
// out.setCodec(codec);
7.對話框去掉邊框:
QWidget::QWidget ( QWidget * parent = 0, Qt::WindowFlags f = 0 ) 我們主要是繼承Qwidget類時設置WindowFlags ,設置成Qt::CustomizeWindowHint或Qt::FramelessWindowHint,也可以用函數setWindowFlags進行設置
8.設置控件透明度:
setWindowOpacity可以設置控件透明度,0.0-1.0,0.0是完全透明,對於容器類控件,它的所有子部件也隨之變透明
9.啓動其他應用程序,比如打開瀏覽器,打開一個excel文件等:
openUrl函數可以打開不同類型的文件,程序,網址等,會啓動系統默認打開工具進行打開,
openUrl ( const QUrl & url ) ;而QUrl以網址的形式設置一個文件全路徑,進行打開。
如:QUrl url("http://www.example.com/List of holidays.xml");
QUrl url;
url.setUrl("F:/test/abc.chm");
10. 不要在switch、while,for裏使用qprocess:
qprocess是多進程處理的,可能持續時間長,也可能會出異常,所以不要使用。在其他地方使用時,最好在start之後進行等待一段時間,waitforfinish